﻿/*
 * Copyright (c) <2012> <guangboo49@gmail.com>
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy of this 
 * software and associated documentation files (the "Software"), to deal in the Software 
 * without restriction, including without limitation the rights to use, copy, modify, merge, 
 * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons 
 * to whom the Software is furnished to do so, subject to the following conditions: 
 * The above copyright notice and this permission notice shall be included in all copies or 
 * substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING 
 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/

using System;

namespace Optparse {
    public class ArgValueParseException : Exception {
        public IArgOption Option { get; private set; }
        public string OptValue { get; private set; }

        public ArgValueParseException(IArgOption option, string optValue)
            : base(string.Format("The value of argument {0}({1}) is invalid, it requires a {2} value.", option.Alias, option.Name, option.ValueType)) {
            this.Option = option;
            this.OptValue = optValue;
        }

        public ArgValueParseException(IArgOption option, string optValue, string message)
            : base(message) {
            this.Option = option;
            this.OptValue = optValue;
        }

        public ArgValueParseException(IArgOption option, string optValue, string message, Exception innerException)
            : base(message, innerException) {
                this.Option = option;
                this.OptValue = optValue;
        }
    }
}
